class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        //hash统计每个字母个数（一样就是字母异位词）
        vector<int> ret;
        int hash1[26]={0};  //字符串p字母出现个数
        for(auto ch:p) hash1[ch-'a']++;

        int hash2[26]={0};  //窗口里面的每个字母个数
        int m=p.size();
        int count=0;        //  有效字母个数
        for(int left=0,right=0;right<s.size();right++)
        {
            char in=s[right];
            //看看对应字母个数有没有超
            hash2[in-'a']++;
            if(hash2[in-'a']<=hash1[in-'a']) 
                count++;    //有效字母数加1
            if(right-left+1>m)      //长度超了
            {
                char out=s[left++];     //移动left，进窗口
                if(hash2[out-'a']--<=hash1[out-'a']) 
                    count--;    //有效字母-1
            }
            if(count==m)    //长度相同，有效字母一样
                ret.push_back(left);    //记录left
        }
        return ret;
    }
};